package com.yangyang.notepad;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;
import android.os.Environment;
import android.widget.Toast;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;

public class DatabaseBackupHelperOptimized {

    // 导出数据库到外部存储
    public boolean exportDatabase(Context context, String dbName) {
        try {
            File dbFile = context.getDatabasePath(dbName);
            if (!dbFile.exists()) {
                Toast.makeText(context, "数据库不存在，导出失败", Toast.LENGTH_SHORT).show();
                return false;
            }

            File exportDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "notepad_backups");

            // 使用 FileUtils 创建目录(自动处理目录存在性检查)
            FileUtils.forceMkdir(exportDir);

            File exportFile = new File(exportDir, StringUtils.join(dbName, "_backup_", DateFormatUtils.format(new Date(), "yyyyMMdd_HHmmss"), ".db"));

            // 使用 FileUtils 拷贝文件(一行代码替代手动拷贝)
            FileUtils.copyFile(dbFile, exportFile);

            // 刷新媒体库
            MediaScannerConnection.scanFile(context, new String[]{exportFile.getAbsolutePath()}, null, null);

            Toast.makeText(context, "数据库导出成功", Toast.LENGTH_SHORT).show();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(context, "数据库导出失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            return false;
        }
    }

    // 从外部文件导入数据库
    public boolean importDatabase(Context context, Uri importUri, String dbName) {
        try (InputStream inputStream = context.getContentResolver().openInputStream(importUri)) {
            if (inputStream == null) {
                Toast.makeText(context, "无法打开导入文件", Toast.LENGTH_SHORT).show();
                return false;
            }

            File dbFile = context.getDatabasePath(dbName);

            // 自动创建父目录(如果不存在)
            FileUtils.forceMkdirParent(dbFile);

            // 如果目标文件存在则删除
            FileUtils.deleteQuietly(dbFile);

            // 使用 FileUtils 拷贝流到文件
            FileUtils.copyInputStreamToFile(inputStream, dbFile);

            Toast.makeText(context, "数据库导入成功", Toast.LENGTH_SHORT).show();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(context, "数据库导入失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            return false;
        }
    }
}